package com.anxin.act.busFlow.dao;

import com.anxin.act.busFlow.entity.WfBusNode;
import com.anxin.framework.web.dao.BaseDao;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 业务节点Dao接口
 *
 * @author jbs
 * @date 2020-04-15
 */
public interface WfBusNodeDao extends BaseDao<WfBusNode>{
    /**
     * 查询业务节点
     *
     * @param id 业务节点ID
     * @return 业务节点
     */
    public WfBusNode getById(String id);

    /**
     * 查询业务节点列表
     *
     * @param wfBusNode 业务节点
     * @return 业务节点集合
     */
    public List<WfBusNode> findList(WfBusNode wfBusNode);

    /**
     * 新增业务节点
     *
     * @param wfBusNode 业务节点
     * @return 结果
     */
    public int insert(WfBusNode wfBusNode);

    /**
     * 修改业务节点
     *
     * @param wfBusNode 业务节点
     * @return 结果
     */
    public int update(WfBusNode wfBusNode);

    /**
     * 删除业务节点
     *
     * @param id 业务节点ID
     * @param userId 操作人ID
     * @return 结果
     */
    public int deleteById(@Param("id") String id, @Param("userId") String userId);

    /**
     * 绑定dataId
     * @param id wfbusNode表的Id
     * @param dataId 数据ID
     * @return
     */
    public int bindingDataId(@Param("id") String id, @Param("dataId") String dataId);

    /**
     * 再次启动
     * @param id wfBusNode表ID
     * @return
     */
    public WfBusNode getLastNode(String id);

    /**
     * 更改节点是否最新状态
     * @param wfBusNode
     * @return
     */
    public int updateLatest(WfBusNode wfBusNode);

    /**
     * 获取节点审批的历史记录
     * @param id
     * @return
     */
    public List<WfBusNode> getHistoryApproval(String id);

    /**
     * 查询一级节点的下一个节点
     * @param id 一级节点ID
     * @return
     */
    public WfBusNode getNextPrimaryNode(String id);

    /**
     * 根据NodeId查询记录
     * @param nodeId
     * @return
     */
    public WfBusNode getByNodeId(@Param("nodeId")String nodeId,@Param("busId")String busId);

    /**
     * 节点中发起的合同 在合同变更时的特殊处理
     * @param actId
     * @param dataId
     * @param busId
     * @return
     */
    public List<WfBusNode> getWfBusNodeByContractId(@Param("actId")String actId, @Param("dataId")String dataId, @Param("busId")String busId);

    /**
     * 修改流程状态
     * @param id wf_bus_node 表ID
     * @param status 审批状态
     */
    public void updateStatus(@Param("id") String id,@Param("status") String status);

    /**
     * 更新dataId
     * @param actId 流程实例ID
     * @param dataId 数据ID
     * @param busId 业务数据ID
     * @param newDataId 新的dataID
     * @return
     */
    public int updateDataId(@Param("actId")String actId, @Param("dataId")String dataId, @Param("busId")String busId, @Param("newDataId")String newDataId);

    /**
     * 根据nodeId查询审批通过的记录条数
     * @return
     */
    public int findCompleteByNodeId(@Param("nodeId") String nodeId, @Param("busId") String busId);

    /**
     * 查询应该被删除的节点
     * @return
     */
    public List<String> findDeleteNode();


    /**
     * 获取使用的流程ID
     * @param busId
     * @return
     */
    public String getFlowId(@Param("busId") String busId);

    /**
     * 更新轮次ID
     * @param roundId
     * @param busId
     */
    public void updateRoundId(@Param("roundId") String roundId,@Param("busId")String busId);

    /**
     * 查询项目角色
     * @param editRole
     * @param userId
     * @param dealId
     */
    public List<String> findDealRole(@Param("editRole")List<String> editRole, @Param("userId") String userId, @Param("dealId") String dealId);

    /**
     * 流程作废. 清空流程的状态
     */
    int cleanWfBusNodeActStatus(@Param("id") String id, @Param("actStatus") String actStatus);

    public String getDataType(@Param("busId") String busId);

    /**
     * 修改项目阶段
     * @param id
     * @param dealStage
     * @return
     */
    int updateDealStage(@Param("id") String id, @Param("dealStage") String dealStage);
    
    List<String> findAllChildrenNode (@Param("node") String node);
}
